package supertrunfo;

import daos.JogoDAOS;
import domain.HeroisDaMarvel;
import domain.Historico;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.JOptionPane;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class JogoSTM extends javax.swing.JInternalFrame implements Runnable{

    int vezJogar;
    private boolean executando;
    private static ResourceBundle myResources;
    private static final Logger log = Logger.getLogger(JogoSTM.class.getName());

    /** Creates new form JogoST */
    public JogoSTM(String titulo, boolean resizable, boolean closeable, boolean maximizable, boolean iconifiable) {
        super(titulo,resizable,closeable,maximizable,iconifiable);
        
        try {

            Handler console = new ConsoleHandler();
            Handler file = new FileHandler("C:\\SuperTropa.log");

            /*Define que na consola apenas aparece log com nível superior ou
              a warning e no ficheiro deve aparecer o log de qualquer nível
             */

            console.setLevel(Level.INFO);
            file.setLevel(Level.ALL);
            //Define o formato de output do ficheiro como XML
            file.setFormatter(new SimpleFormatter());
            //Adiciona os handlers para ficheiro e console
            log.addHandler(file);
            log.addHandler(console);
            //Ignora os Handlers definidos no Logger Global
            log.setUseParentHandlers(false);
        }

        catch(IOException io){
            log.warning("O ficheiro hellologgin.xml não pode ser criado");
        }

        if (Login.LinguaAtual.equals("Português")) {
           myResources =  ResourceBundle.getBundle("Message_pt_BR",Locale.getDefault());
        }
        else {
           myResources =  ResourceBundle.getBundle("Message_en_US",Locale.ENGLISH);
        }

        log.info("Tela de jogo Herois da Marvel iniciada.");
        initComponents();
        new Thread(this).start();
        setVisible(true);
        setLocation(150,50);
    }

    
    static ArrayList<Integer> cartasJogador = new ArrayList<Integer>();
    static ArrayList<Integer> cartasComputador = new ArrayList<Integer>();
    ArrayList<Integer> cartasEmpate = new ArrayList<Integer>();
    HeroisDaMarvel pfU = new HeroisDaMarvel();
    HeroisDaMarvel pfC = new HeroisDaMarvel();
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        grupoB = new javax.swing.ButtonGroup();
        jLayeredPane1 = new javax.swing.JLayeredPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        taDados = new javax.swing.JTextPane();
        tTipo = new javax.swing.JTextField();
        tInteligencia = new javax.swing.JTextField();
        bJogar = new javax.swing.JButton();
        tHabilidade = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        rbHabilidade = new javax.swing.JRadioButton();
        rbVelocidade = new javax.swing.JRadioButton();
        bContinuar = new javax.swing.JButton();
        lNome = new javax.swing.JLabel();
        tAltura = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        tVelocidade = new javax.swing.JTextField();
        rbInteligencia = new javax.swing.JRadioButton();
        rbForca = new javax.swing.JRadioButton();
        tForca = new javax.swing.JTextField();
        rbAltura = new javax.swing.JRadioButton();
        jLabel1 = new javax.swing.JLabel();
        lNomeC = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameActivated(evt);
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameOpened(evt);
            }
        });
        addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                formFocusGained(evt);
            }
        });

        jLayeredPane1.setBackground(new java.awt.Color(255, 255, 255));
        jLayeredPane1.setOpaque(true);

        taDados.setBackground(new java.awt.Color(233, 232, 232));
        taDados.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        taDados.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        taDados.setEnabled(false);
        taDados.setSelectionColor(new java.awt.Color(0, 0, 0));
        jScrollPane1.setViewportView(taDados);

        jScrollPane1.setBounds(70, 250, 570, 149);
        jLayeredPane1.add(jScrollPane1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        tTipo.setBackground(new java.awt.Color(204, 204, 204));
        tTipo.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        tTipo.setEnabled(false);
        tTipo.setBounds(280, 10, 28, -1);
        jLayeredPane1.add(tTipo, javax.swing.JLayeredPane.DEFAULT_LAYER);

        tInteligencia.setBackground(new java.awt.Color(204, 204, 204));
        tInteligencia.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        tInteligencia.setEnabled(false);
        tInteligencia.setBounds(370, 70, 28, -1);
        jLayeredPane1.add(tInteligencia, javax.swing.JLayeredPane.DEFAULT_LAYER);

        bJogar.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        bJogar.setText(myResources.getString("jogo.jogar"));
        bJogar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bJogarActionPerformed(evt);
            }
        });
        bJogar.setBounds(230, 200, 94, -1);
        jLayeredPane1.add(bJogar, javax.swing.JLayeredPane.DEFAULT_LAYER);

        tHabilidade.setBackground(new java.awt.Color(204, 204, 204));
        tHabilidade.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        tHabilidade.setEnabled(false);
        tHabilidade.setBounds(370, 100, 28, -1);
        jLayeredPane1.add(tHabilidade, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel2.setBackground(new java.awt.Color(153, 153, 153));
        jLabel2.setBounds(500, 40, 148, 188);
        jLayeredPane1.add(jLabel2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        grupoB.add(rbHabilidade);
        rbHabilidade.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        rbHabilidade.setText(myResources.getString("jogo.habilidade"));
        rbHabilidade.setOpaque(false);
        rbHabilidade.setBounds(230, 100, 130, -1);
        jLayeredPane1.add(rbHabilidade, javax.swing.JLayeredPane.DEFAULT_LAYER);

        grupoB.add(rbVelocidade);
        rbVelocidade.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        rbVelocidade.setText(myResources.getString("jogo.velocidade"));
        rbVelocidade.setOpaque(false);
        rbVelocidade.setBounds(230, 160, 130, -1);
        jLayeredPane1.add(rbVelocidade, javax.swing.JLayeredPane.DEFAULT_LAYER);

        bContinuar.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        bContinuar.setText(myResources.getString("jogo.continuar"));
        bContinuar.setEnabled(false);
        bContinuar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bContinuarActionPerformed(evt);
            }
        });
        bContinuar.setBounds(330, 200, 149, -1);
        jLayeredPane1.add(bContinuar, javax.swing.JLayeredPane.DEFAULT_LAYER);

        lNome.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        lNome.setText(myResources.getString("jogo.nick"));
        lNome.setBounds(30, 20, 180, -1);
        jLayeredPane1.add(lNome, javax.swing.JLayeredPane.DEFAULT_LAYER);

        tAltura.setBackground(new java.awt.Color(204, 204, 204));
        tAltura.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        tAltura.setEnabled(false);
        tAltura.setBounds(370, 130, 28, -1);
        jLayeredPane1.add(tAltura, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel5.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        jLabel5.setText(myResources.getString("jogo.tipo"));
        jLabel5.setBounds(230, 10, -1, -1);
        jLayeredPane1.add(jLabel5, javax.swing.JLayeredPane.DEFAULT_LAYER);

        tVelocidade.setBackground(new java.awt.Color(204, 204, 204));
        tVelocidade.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        tVelocidade.setEnabled(false);
        tVelocidade.setBounds(370, 160, 28, -1);
        jLayeredPane1.add(tVelocidade, javax.swing.JLayeredPane.DEFAULT_LAYER);

        grupoB.add(rbInteligencia);
        rbInteligencia.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        rbInteligencia.setText(myResources.getString("jogo.inteligencia"));
        rbInteligencia.setOpaque(false);
        rbInteligencia.setBounds(230, 70, 130, -1);
        jLayeredPane1.add(rbInteligencia, javax.swing.JLayeredPane.DEFAULT_LAYER);

        grupoB.add(rbForca);
        rbForca.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        rbForca.setText(myResources.getString("jogo.forca"));
        rbForca.setOpaque(false);
        rbForca.setBounds(230, 40, 80, -1);
        jLayeredPane1.add(rbForca, javax.swing.JLayeredPane.DEFAULT_LAYER);

        tForca.setBackground(new java.awt.Color(204, 204, 204));
        tForca.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        tForca.setEnabled(false);
        tForca.setBounds(370, 40, 28, -1);
        jLayeredPane1.add(tForca, javax.swing.JLayeredPane.DEFAULT_LAYER);

        grupoB.add(rbAltura);
        rbAltura.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        rbAltura.setText(myResources.getString("jogo.altura"));
        rbAltura.setOpaque(false);
        rbAltura.setBounds(230, 130, 100, -1);
        jLayeredPane1.add(rbAltura, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel1.setBackground(new java.awt.Color(153, 153, 153));
        jLabel1.setBounds(30, 40, 148, 188);
        jLayeredPane1.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        lNomeC.setFont(new java.awt.Font("Showcard Gothic", 0, 14));
        lNomeC.setText(myResources.getString("jogo.pc"));
        lNomeC.setBounds(500, 20, 200, -1);
        jLayeredPane1.add(lNomeC, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/stcI2.jpg"))); // NOI18N
        jLabel3.setBounds(260, 60, 450, 310);
        jLayeredPane1.add(jLabel3, javax.swing.JLayeredPane.DEFAULT_LAYER);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, jLayeredPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 730, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jLayeredPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 424, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void bJogarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bJogarActionPerformed
        jogar();
}//GEN-LAST:event_bJogarActionPerformed

    private void formFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_formFocusGained
        // TODO add your handling code here:
    }//GEN-LAST:event_formFocusGained

    private void formInternalFrameOpened(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameOpened
        // TODO add your handling code here:
    }//GEN-LAST:event_formInternalFrameOpened

    /**
     * Quando ativar a tela principal "SuperTrunfo", carrega as informações necessárias para o início do jogo.
     * @param evt
     */
    private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameActivated
        sorteioJogador();
        sorteioCarta();// TODO add your handling code here:
        pfU = JogoDAOS.pegaCartaM(cartasJogador.get(0));
        pfC = JogoDAOS.pegaCartaM(cartasComputador.get(0));
        atualizaTela();
        if(vezJogar==1){
            run();
            int n;
            //jogarC(false);
            n = escolherAtributo(pfC);
            jogarC(n);
        }

    }//GEN-LAST:event_formInternalFrameActivated

    /**
    * O jogo pausa a cada rodada para ler as informações e ver a carta do adversário seguindo com botão Continuar.
    * @param evt
    */
    private void bContinuarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bContinuarActionPerformed
        Historico historico = new Historico();
        SimpleDateFormat formatador = new SimpleDateFormat();
        if(cartasJogador.isEmpty()){
            JOptionPane.showMessageDialog(null, myResources.getString("jogo.perdeu"));
            setVisible(false);
            historico.setDescricao(myResources.getString("jogo.perdeuD")+formatador.format(Calendar.getInstance().getTime()));
            log.fine("Usuario perdeu o jogo Herois da Marvel.");
            JogoDAOS.historico(historico);
        }
        else if(cartasComputador.isEmpty()){
            JOptionPane.showMessageDialog(null, myResources.getString("jogo.ganhou"));
            setVisible(false);
            log.fine("Usuario ganhou o jogo Herois da Marvel.");
            historico.setDescricao(myResources.getString("jogo.ganhouD")+formatador.format(Calendar.getInstance().getTime()));
            JogoDAOS.historico(historico);
        }
        else{
        pfU = JogoDAOS.pegaCartaM(cartasJogador.get(0));
        pfC = JogoDAOS.pegaCartaM(cartasComputador.get(0));
        atualizaTela();// TODO add your handling code here:
        if(vezJogar==1){
            run();
            int n;
            //jogarC(false);
            n = escolherAtributo(pfC);
            jogarC(n);
            }
        }
    }//GEN-LAST:event_bContinuarActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton bContinuar;
    private javax.swing.JButton bJogar;
    private javax.swing.ButtonGroup grupoB;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLayeredPane jLayeredPane1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lNome;
    private javax.swing.JLabel lNomeC;
    private javax.swing.JRadioButton rbAltura;
    private javax.swing.JRadioButton rbForca;
    private javax.swing.JRadioButton rbHabilidade;
    private javax.swing.JRadioButton rbInteligencia;
    private javax.swing.JRadioButton rbVelocidade;
    private javax.swing.JTextField tAltura;
    private javax.swing.JTextField tForca;
    private javax.swing.JTextField tHabilidade;
    private javax.swing.JTextField tInteligencia;
    private javax.swing.JTextField tTipo;
    private javax.swing.JTextField tVelocidade;
    private javax.swing.JTextPane taDados;
    // End of variables declaration//GEN-END:variables

    /**
     * Método que sorteia quem inicia o jogo.
     */
public void sorteioJogador(){
        vezJogar=(int)(Math.random()*2);

        if (vezJogar==0){
            JOptionPane.showMessageDialog(null, myResources.getString("jogo.pcComeca"));
            log.fine("O computador começará a partida.");
        }
            else{
            JOptionPane.showMessageDialog(null, myResources.getString("jogo.userComeca"));
            log.fine("O usuário começará a partida.");
            }
 }

/**
 * Método que "embaralha" as 32 cartas e distribui para Jogador e Computador.
 */
public void sorteioCarta(){

        cartasJogador.clear();
        cartasComputador.clear();
        ArrayList<Integer> numeros = new ArrayList<Integer>();

        for (int i = 0; i < 32; i++) {
        numeros.add(i+1);
        }

        Collections.shuffle(numeros);

        for (int j = 0; j < 32; j++){
            if (j%2 == 0){
                cartasJogador.add(numeros.get(j)+32);
            }
            else{
                cartasComputador.add(numeros.get(j)+32);
            }
        }
    }

/**
 * Método que compara as 2 cartas que pode ser uma carta SuperTrunfo (caso 1) ou atributo escolhido de cartas normais (caso 2).
 * @param atributo
 * @param atributo2
 * @param dado
 */
public void comparar(int atributo, int atributo2,String dado){
    if(pfU.getTipo().equalsIgnoreCase("1B")){

        if(pfC.getTipo().contains("A")){
            JOptionPane.showMessageDialog(null, myResources.getString("jogo.perdeu"));
            vcPerdeu();
        }
        else{
            JOptionPane.showMessageDialog(null, myResources.getString("jogo.venceu"));
            vcGanhou();
        }
        taDados.setText(myResources.getString("jogo.supertrunfo"));

    }

    else if(pfC.getTipo().equalsIgnoreCase("1B")){

        if(pfU.getTipo().contains("A")){
            JOptionPane.showMessageDialog(null, myResources.getString("jogo.venceu"));
            vcGanhou();
        }
        else{
            JOptionPane.showMessageDialog(null, myResources.getString("jogo.perdeu"));
            vcPerdeu();
        }

        taDados.setText(myResources.getString("jogo.supertrunfo"));

    }

    else if(atributo>atributo2){
        int id;
        JOptionPane.showMessageDialog(null, myResources.getString("jogo.venceu"));
        imprimiDados(atributo,atributo2,dado);
        if (cartasEmpate.size()>0){
            for (int i=0; i<cartasEmpate.size(); i++){
                cartasJogador.add(cartasEmpate.get(i));
            }
            cartasEmpate.clear();
        }
        vcGanhou();

    }
    else if(atributo==atributo2){
        JOptionPane.showMessageDialog(null, myResources.getString("jogo.empate"));
        imprimiDados(atributo,atributo2,dado);

        cartasEmpate.add(cartasJogador.get(0));
        cartasEmpate.add(cartasComputador.get(0));
        cartasJogador.remove(0);
        cartasComputador.remove(0);
        continuar();
    }
    else{
        int id;
        JOptionPane.showMessageDialog(null, myResources.getString("jogo.perdeu"));
        imprimiDados(atributo,atributo2,dado);
         if (cartasEmpate.size() > 0){
            for (int i=0; i<cartasEmpate.size(); i++){
                cartasComputador.add(cartasEmpate.get(i));
            }
            cartasEmpate.clear();
        }
        vcPerdeu();
        
    }
    
}

    /**
     * Método invocado na vitória, adiciona-se a carta do adversário que perdeu e carta vencedora no "Deck"
     */
    private void vcGanhou(){
        int id;
        id = cartasJogador.get(0);
        cartasJogador.remove(0);
        cartasJogador.add(id);
        cartasJogador.add(cartasComputador.get(0));
        cartasComputador.remove(0);
        System.out.println(cartasJogador.toString());
        System.out.println(cartasComputador.toString());
        vezJogar=0;
        continuar();
    }

    /**
     * Método invocado na derrota, o jogador perde a carta da rodada e adiciona-se no "Deck" do Computador.
     */
    private void vcPerdeu(){
        int id;
        id = cartasComputador.get(0);
        cartasComputador.remove(0);
        cartasComputador.add(id);
        cartasComputador.add(cartasJogador.get(0));
        cartasJogador.remove(0);
        System.out.println(cartasJogador.toString());
        System.out.println(cartasComputador.toString());
        vezJogar=1;
        continuar();
    }
    /**
     * Método invocado no fim da rodada, desativa o botão Jogar e ativa o botão Continuar (seguir o jogo).
     */
    private void continuar(){
       bJogar.setEnabled(false);
       bContinuar.setEnabled(true);
       rbForca.setEnabled(false);
       rbInteligencia.setEnabled(false);
       rbHabilidade.setEnabled(false);
       rbVelocidade.setEnabled(false);
       rbAltura.setEnabled(false);
    }

    /*private void jogarC(boolean a){
       bJogar.setEnabled(a);
       bContinuar.setEnabled(a);
    }*/

    /**
     * Método que atualiza as informações da tela do Jogo, carregando as imagens das cartas e atributos.
     */
    private void atualizaTela() {
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource(pfU.getLinkImagem())));
        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/stf.jpg")));
        lNome.setText(pfU.getNome());
        lNomeC.setText("");
        tTipo.setText(pfU.getTipo());
        tForca.setText(pfU.getForca()+"");
        tInteligencia.setText(pfU.getInteligencia()+"");
        tAltura.setText(pfU.getAltura()+"");
        tHabilidade.setText(pfU.getHabilidade()+"");
        tVelocidade.setText(pfU.getVelocidade()+"");
        taDados.setText("");
        bJogar.setEnabled(true);
        bContinuar.setEnabled(false);
        rbForca.setEnabled(true);
       rbInteligencia.setEnabled(true);
       rbHabilidade.setEnabled(true);
       rbVelocidade.setEnabled(true);
       rbAltura.setEnabled(true);


    }

    /**
     * Método que apresenta os dados no painel de texto.
     * @param atributo
     * @param atributo2
     * @param dado
     */
    private void imprimiDados(int atributo, int atributo2, String dado){
        taDados.setText(myResources.getString("jogo.sua")+dado+" = "+atributo+", "+dado+myResources.getString("jogo.computador")+atributo2+"\n"+myResources.getString("jogo.computadorC")+"\n"+pfC.getNome()+
                "\n"+myResources.getString("jogo.forca")+pfC.getForca()+
                "\n"+myResources.getString("jogo.inteligencia")+pfC.getInteligencia()+
                "\n"+myResources.getString("jogo.habilidade")+pfC.getHabilidade()+
                "\n"+myResources.getString("jogo.velocidade")+pfC.getVelocidade()+
                "\n"+myResources.getString("jogo.altura")+pfC.getAltura());
    }

        /**
     * media aritmetica de inteligencia das cartas do baralho
     */
    public static final double mediaInt = 107.25;
    /**
     * media aritmetica de força das cartas do baralho
     */
    public static final double mediaForca = 152.49;
    /**
     * media aritmetica de violencia das cartas do baralho
     */
    public static final double mediaHabilidade = 163.42;
    /**
     * media aritmetica de velocidade das cartas do baralho
     */
    public static final double mediaVelocidade = 71.5;
    /**
     * media aritmetica de popularidade das cartas do baralho
     */
    public static final double mediaAltura = 203;


    /**
     * método  utilizado pelo computador para escolher qual atributo selecionar da carta sorteada
     * o método utiliza a media dos atributos das cartas do banco de dado
     * @param carta
     * @return posicao do vetor que equivale ao atributo utilizado
     */
    public int escolherAtributo(HeroisDaMarvel carta){
        /**
         * calcula a diferenca do valor da força da carta sorteada e da media de força das cartas do baralho
         */
        double forca = carta.getForca()*4.4 - mediaForca;
        /**
         * calcula a diferenca do valor da inteligencia da carta sorteada e da media de inteligencia das cartas do baralho
         */
        double inteligencia = carta.getInteligencia()*22 - mediaInt;
        /**
         * calcula a diferenca do valor da violencia da carta sorteada e da media de força das cartas do baralho
         */
        double violencia = carta.getHabilidade()*(2.2) - mediaHabilidade;
        /**
         * calcula a diferenca do valor da velocidade da carta sorteada e da media de força das cartas do baralho
         */
        double velocidade = carta.getVelocidade()*11 - mediaVelocidade;
        /**
         * calcula a diferenca do valor da popularidade da carta sorteada e da media de força das cartas do baralho
         */
        double popularidade = carta.getAltura() - mediaAltura;
        /**
         * criacao de vetor que recebe o forca na posicao 0, inteligencia na posicao 1, violencia na posicao 2
         * velocidade na posicao 3 e popularidade na posicao 4
         */
        double vetor[]={forca,inteligencia,violencia,velocidade,popularidade};
        /**
         * variavel usada na checagem de qual valor do vetor é maximo
         */
        double max = 0;
        /**
         * variavel que acumula a posicao do valor maximo no vetor para ser usada na escolha do computador dentre os atributos
         */
        int cont=0;
        for (int i=0; i<5 ; i++){
            if (max<=vetor[i]){
                max=vetor[i];
                cont = i;
            }
        }
        /**
         * retorno da variavel cont que da a posicao do vetor que equivale ao atributo a ser usado na rodada
         */
        return cont;
    }

    /**
     * Método que percebe o atributo marcado no RadioButton respectivo. É usado quando é a vez do computador
     * @param n
     */
    private void jogar() {
        if(rbForca.isSelected()==true){
            comparar(Integer.parseInt(tForca.getText()),pfC.getForca(),myResources.getString("jogo.forca"));
        }
        if(rbInteligencia.isSelected()==true){
            comparar(Integer.parseInt(tInteligencia.getText()),pfC.getInteligencia(),myResources.getString("jogo.inteligencia"));
        }
        if(rbHabilidade.isSelected()==true){
            comparar(Integer.parseInt(tHabilidade.getText()),pfC.getHabilidade(),myResources.getString("jogo.habilidade"));
        }
        if(rbAltura.isSelected()==true){
            comparar(Integer.parseInt(tAltura.getText()),pfC.getAltura(),myResources.getString("jogo.altura"));
        }
        if(rbVelocidade.isSelected()==true){
            comparar(Integer.parseInt(tVelocidade.getText()),pfC.getVelocidade(),myResources.getString("jogo.velocidade"));
        }
        if(grupoB.getSelection()==null)
            JOptionPane.showMessageDialog(null, "Selecione um atributo!");
        else
        {
        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource(pfC.getLinkImagem())));
        lNomeC.setText(pfC.getNome());
        }
    }
    
    /**
     * Método que escolher qual atributo vai ser usado. Recebe como parâmetro o atributo(inteiro) escolhido pelo comptuador. É usado quando é a vez do computador.
     * @param n 
     */
    private void jogarC(int n) {
        if(n==0){
            comparar(Integer.parseInt(tForca.getText()),pfC.getForca(),myResources.getString("jogo.forca"));
        }
        if(n==1){
            comparar(Integer.parseInt(tInteligencia.getText()),pfC.getInteligencia(),myResources.getString("jogo.inteligencia"));
        }
        if(n==2){
            comparar(Integer.parseInt(tHabilidade.getText()),pfC.getHabilidade(),myResources.getString("jogo.habilidade"));
        }
        if(n==4){
            comparar(Integer.parseInt(tAltura.getText()),pfC.getAltura(),myResources.getString("jogo.altura"));
        }
        if(n==3){
            comparar(Integer.parseInt(tVelocidade.getText()),pfC.getVelocidade(),myResources.getString("jogo.velocidade"));
        }
        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource(pfC.getLinkImagem())));
        lNomeC.setText(pfC.getNome());
    }

    public void run() {
        executando=true;
        while(executando){
            try{
                synchronized(this){
                    wait(500L);
                }
                //Thread.sleep(5000L);
                executando=false;
            }
            catch(InterruptedException e){
                e.printStackTrace();
            }
        }
    }

}
